home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / DiceSource / src / alib / amigalib / createport.c < prev    next >
C/C++ Source or Header  |  1994-02-18  |  1KB  |  69 lines

  1.  
  2. /*
  3.  *  CreatePort.C
  4.  */
  5.  
  6. #include <exec/types.h>
  7. #include <exec/ports.h>
  8. #include <exec/memory.h>
  9. #ifdef INCLUDE_VERSION        /*    2.0 */
  10. #include <clib/exec_protos.h>
  11. #include <clib/alib_protos.h>
  12. #else
  13. extern void *AllocMem(long, long);
  14. extern void FreeMem(void *, long);
  15. extern void NewList(struct List *);
  16. extern void AddPort(struct MsgPort *);
  17. extern void RemPort(struct MsgPort *);
  18. extern int AllocSignal(int);
  19. extern void FreeSignal(int);
  20. extern void *FindTask(char *);
  21. #endif
  22.  
  23. #ifndef HYPER
  24. #define HYPER
  25. #endif
  26.  
  27. typedef struct MsgPort    MsgPort;
  28.  
  29. MsgPort *
  30. HYPER ## CreatePort(name, pri)
  31. UBYTE *name;
  32. long pri;
  33. {
  34.     MsgPort *port;
  35.  
  36.     if (port = AllocMem(sizeof(MsgPort), MEMF_PUBLIC | MEMF_CLEAR)) {
  37.     if ((char)(port->mp_SigBit = AllocSignal(-1)) >= 0) {
  38.         port->mp_Node.ln_Pri = pri;
  39.         port->mp_Node.ln_Type = NT_MSGPORT;
  40.         port->mp_Node.ln_Name = name;
  41.         port->mp_Flags   = PA_SIGNAL;
  42.         port->mp_SigTask = FindTask(NULL);
  43.         NewList(&port->mp_MsgList);
  44.         if (name)
  45.         AddPort(port);
  46.     } else {
  47.         FreeMem(port, sizeof(MsgPort));
  48.         port = NULL;
  49.     }
  50.     }
  51.     return(port);
  52. }
  53.  
  54. void
  55. DeletePort(port)
  56. MsgPort *port;
  57. {
  58.     if (port) {
  59.     if (port->mp_Node.ln_Name)
  60.         RemPort(port);
  61.     if ((port->mp_Flags & PF_ACTION) == PA_SIGNAL) {
  62.         FreeSignal(port->mp_SigBit);
  63.         port->mp_Flags = PA_IGNORE;
  64.     }
  65.     FreeMem(port, sizeof(MsgPort));
  66.     }
  67. }
  68.  
  69.